package org.example.myleet.p977;

public class Solution {
    /**
     * 思路：双指针
     * 通过双指针，从绝对值最小的位置开始，向两边扩张，就可以保持平方之后的顺序为非下降
     */
    public int[] sortedSquares(int[] nums) {
        //先找到绝对值最小的数的位置
        int l = 0;
        for (int i = 0; i < nums.length; ++i) {
            if (Math.abs(nums[i]) < Math.abs(nums[l])) {
                l = i;
            }
        }
        //确定左右指针的起始位置
        int r = l + 1;
        int[] result = new int[nums.length];
        for (int i = 0; i < nums.length; ++i) {
            if (l < 0) {
                //左边出界，则让右指针走
                result[i] = nums[r] * nums[r];
                ++r;
            } else if (r >= nums.length) {
                //右边出界，则让左指针走
                result[i] = nums[l] * nums[l];
                --l;
            } else {
                //比较左右指针的绝对值大小，绝对值小的那一边优先进行平方计算
                int absL = Math.abs(nums[l]);
                int absR = Math.abs(nums[r]);
                if (absL == absR) {
                    result[i] = nums[l] * nums[l];
                    --l;
                } else if (absL < absR) {
                    result[i] = nums[l] * nums[l];
                    --l;
                } else {
                    result[i] = nums[r] * nums[r];
                    ++r;
                }
            }
        }
        return result;
    }
}
